package com.apexedu.eas.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 
 * 【稳定版】<br/>
 * 【类名】：日期工具类<br/>
 * 【简介】：<br/>
 * 【依赖】：<br/>
 * 
 * @author SwordRays
 * @date 2016年6月21日 上午12:44:58 
 * @since JDK1.6 
 * @version 1.0.0 
 *
 */
public class DateTimeUtil {
	/**
	 * 格式化字符串
	 * * 字母 日期或时间元素 表示 示例
	 * G Era 标志符 Text AD
	 * y 年 Year 1996; 96
	 * M 年中的月份 Month July; Jul; 07
	 * w 年中的周数 Number 27
	 * W 月份中的周数 Number 2
	 * D 年中的天数 Number 189
	 * d 月份中的天数 Number 10
	 * F 月份中的星期 Number 2
	 * E 星期中的天数 Text Tuesday; Tue
	 * a Am/pm 标记 Text PM
	 * H 一天中的小时数（0-23） Number 0
	 * k 一天中的小时数（1-24） Number 24
	 * K am/pm 中的小时数（0-11） Number 0
	 * h am/pm 中的小时数（1-12） Number 12
	 * m 小时中的分钟数 Number 30
	 * s 分钟中的秒数 Number 55
	 * S 毫秒数 Number 978
	 * z 时区 General time zone Pacific Standard Time; PST; GMT-08:00
	 * Z 时区 RFC 822 time zone -0800
	 */
	/** 常用日期格式化字符串 yyyy-MM-dd */
	public static final String DATE_FORMATE_STRING = "yyyy-MM-dd";
	/** 常用日期格式化字符串 yyyy/MM/dd */
	public static final String DATE_FORMATE_STRING_SLASH = "yyyy/MM/dd";
	/** 常用日期格式化字符串 yyyyMMdd */
	public static final String DATE_FORMATE_STRING_NOLINKCHAR = "yyyyMMdd";
	/** 常用日期格式化字符串 yyyy年MM月dd日 */
	public static final String DATE_FORMATE_STRING_CN = "yyyy年MM月dd日";

	/** 常用日期(带时间)格式化字符串 yyyy-MM-dd HH:mm:ss */
	public static final String DATETIME_FORMATE_STRING = "yyyy-MM-dd HH:mm:ss";
	/** 常用日期(带时间)化字符串 yyyy/MM/dd HH:mm:ss */
	public static final String DATETIME_FORMATE_STRING_SLASH = "yyyy/MM/dd HH:mm:ss";
	/** 常用日期(带时间)格式化字符串 yyyyMMddHHmmss */
	public static final String DATETIME_FORMATE_STRING_NOLINKCHAR = "yyyyMMddHHmmss";
	/** 常用日期格式化字符串 yyyy年MM月dd日 HH时mm分ss秒 */
	public static final String DATETIME_FORMATE_STRING_CN = "yyyy年MM月dd日 HH时mm分ss秒";

	/**
	 * 
	 * 【方法名】：获取当前日期时间<br/>
	 * 【简介】：<br/>
	 * 【创建时间】：2013年1月21日 上午12:46:54<br/>
	 * 
	 * @return
	 */
	public static Date now() {
		return new Date();
	}

	/**
	 * 
	 * 【方法名】：解析日期字符串<br/>
	 * 【简介】：<br/>
	 * 【创建时间】：2013年1月21日 上午12:47:42<br/>
	 * 
	 * @param dateStr 日期字符串
	 * @param parseStr 指定解析格式
	 * @return 解析出的日期对象
	 */
	public static Date parseDateTime(String dateStr, String parseStr) {
		Date date = null;
		SimpleDateFormat sdf = new SimpleDateFormat(parseStr);
		try {
			if (10 == dateStr.length()) {
				dateStr = dateStr + " 00:00:00";
			}
			date = sdf.parse(dateStr);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return date;
	}

	/**
	 * 
	 * 【方法名】：格式化日期<br/>
	 * 【简介】：<br/>
	 * 【创建时间】：2013年1月21日 上午12:48:12<br/>
	 * 
	 * @param date 日期
	 * @param formatStr 格式化为字符串的日期格式
	 * @return 格式化后的日期字符串
	 */
	public static String formatDateTime(Date date, String formatStr) {
		SimpleDateFormat sdf = new SimpleDateFormat(formatStr);
		return sdf.format(date);
	}

	/**
	 * 
	 * @see #formatDateTime(Date, String)
	 * @param formatStr
	 * @return
	 */
	public static String formatDateTime(String formatStr) {
		return formatDateTime(new Date(), formatStr);
	}

	/**
	 * 
	 * @see #formatDateTime(Date, String)
	 * @return
	 */
	public static String formatDateTime() {
		return formatDateTime(new Date(), DATETIME_FORMATE_STRING);
	}

	/**
	 * 
	 * 【方法名】：先解析后格式化日期<br/>
	 * 【简介】：将给定的日期字符串按给定的解析格式解析为Date后再按给定的格式字符串格式化为字符串<br/>
	 * 【创建时间】：2013年1月21日 上午12:48:36<br/>
	 * 
	 * @param date 日期字符串
	 * @param parseStr 解析为Date类型的日期格式
	 * @param formatStr 格式化为字符串的日期格式
	 * @return 格式化后的日期字符串
	 */
	public static String formatDateTime(String date, String parseStr, String formatStr) {
		return formatDateTime(parseDateTime(date, parseStr), formatStr);
	}

}
